const redis = require('redis');

//创建客户端连接参数
let REDIS_CONFIG;
let cache = {};

REDIS_CONFIG = {
    port: 6379,
    host: '127.0.0.1',
};

//第一个参数是端口port，第二个参数是host
const redisClinet = redis.createClient(REDIS_CONFIG.port, REDIS_CONFIG.host);

redisClinet.on('error', error => {
    console.error(error);
});

/**
 * @function redis 存储键值对
 * @param {*} key
 * @param {*} val
 */
function set(key, val) {

    //redis的string的key和val都是字符串，为了防止val是对象我们这里需要转换一下
    if (typeof val === 'object') {
        val = JSON.stringify(val);
    } 

    cache[key] = val;
    redisClinet.set(key, val, redis.print);
}

/**
 * @function redis 查询缓存
 * @param {*} key
 */
function get(key) {

    if(typeof key == 'undefined' || key == ''){
        return ' key of cache is empty ';
    }

    if(typeof cache[key] != 'undefined'){

        console.log('cache memory');
        return cache[key];
    
    } else {

        console.log('cache redis');
        const promise = new Promise((reslove, reject) => {

            redisClinet.get(key, (error, val) => {
                if (error) {
                    reject(error);
                }
                if (val == null) {
                    reslove(null);
                }
                //这里的trt catch 仅仅是为了适配json对象的转换
                try {
                    reslove(JSON.parse(val));
                } catch (e) {
                    reslove(val);
                }
            });

        });
        return promise ;
    }
}

module.exports = {
    set,
    get,
};